{% set defaults = {
    'baseurl': 'https://github.com/saltstack-formulas',
    'basedir': '/srv/formulas',
    'update': False,
    'options': {
      'branch': 'master',
    },
   }
%}
{% set formulas = salt['pillar.get']('salt_formulas:list', {}) %}

{%- macro formulas_git_opt(env, opt) -%}
{%- set value = salt['pillar.get']('salt_formulas:git_opts:{0}:{1}'.format(env, opt),
     salt['pillar.get']('salt_formulas:git_opts:default:{0}'.format(opt),
       defaults[opt])) -%}
{{ value|yaml }}
{%- endmacro -%}

{%- macro formulas_opts_for_git_latest(env) -%}
{%- set options = defaults['options'] or {} -%}
{%- do options.update(salt['pillar.get']('salt_formulas:git_opts:default:options') or {}) -%}
{%- do options.update(salt['pillar.get']('salt_formulas:git_opts:{0}:options'.format(env)) or {}) -%}
{{ options|yaml }}
{%- endmacro -%}

{%- macro formulas_roots(env) -%}
{%- set value = [] -%}
{%- for dir in formulas.get(env, []) -%}
{%- set basedir = formulas_git_opt(env, 'basedir')|load_yaml -%}
{%- do value.append('{0}/{1}'.format(basedir, dir)) -%}
{%- endfor -%}
{{ value|yaml }}
{%- endmacro -%}

{# Generate file_roots config merging standard salt config and list of
   enabled formulas #}
{%- macro file_roots(input) -%}
{%- set processed_envs = [] -%}
file_roots:
{%- for name, roots in input|dictsort -%}
{%- do processed_envs.append(name) %}
  {{ name }}:
{%- for dir in roots %}
    - {{ dir }}
{%- endfor -%}
{%- for dir in formulas_roots(name)|load_yaml %}
    - {{ dir }}
{%- endfor -%}
{%- endfor -%}
{%- for name in formulas -%}
{%- if name not in processed_envs %}
  {{ name }}:
{%- for dir in formulas_roots(name)|load_yaml %}
    - {{ dir }}
{%- endfor -%}
{%- endif -%}
{%- endfor -%}
{%- endmacro -%}
